import mongoose from 'mongoose';

const dishSchema = new mongoose.Schema({
  // 基础信息类字段
  dishName: { 
    type: String, 
    required: true,  // 必填字段
    trim: true      // 自动去除首尾空格
  },
  
  // 烹饪状态管理
  cookingStatus: {
    type: String,
    enum: ['delicious', 'acceptable', 'bad'],  // 限定枚举值
    index: true,                               // 建立索引加速查询
    default: 'acceptable'                      // 默认待评价状态
  },

  // 评分系统
  score: { 
    type: Number, 
    min: 0,        // 最小值约束
    max: 100,      // 最大值约束
    set: v => Math.round(v)  // 存储整数值
  },

  // 采购信息
  purchaser: { 
    type: Number,
    ref: 'User',              // 关联用户模型
    required: false            // 必须指定采购人
  },
  purchaseAmount: { 
    type: mongoose.Types.Decimal128,  // 精确小数类型
    get: v => v.toString()            // 获取时转换为字符串
  },

  // 当日烹饪管理
  isCookingToday: {
    type: Boolean,
    default: false  // 默认非当日菜品
  },

  // 用餐人数管理
  dinersCount: { 
    type: Number, 
    min: 1,         // 至少1人就餐
    validate: {
      validator: Number.isInteger,  // 必须为整数
      message: '就餐人数必须为整数'
    }
  },

  // 食材需求管理
  // requiredIngredients: [{
  //   ingredient: { 
  //     type: Number,
  //     ref: 'Ingredient',  // 关联食材模型
  //     required: true
  //   },
  //   quantity: {
  //     type: Number,
  //     min: 0,          // 最小用量约束
  //     set: v => Number(v.toFixed(2))  // 保留两位小数
  //   }
  // }],

  // 多媒体管理
  photos: [{
    type: String,
    match: /^(http|https):\/\//  // 必须为合法URL
  }],

  // 评论系统
  commentIds: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Comment'  // 关联评论模型
  }],

  // 厨师信息
  chefId: { 
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User',    // 关联用户模型
    index: true     // 加速按厨师查询
  },

  // 餐别分类（新增字段）
  mealType: { 
    type: Number,
    enum: [1, 2, 3, 4],     // 早餐/午餐/晚餐/其他
    required: true,         // 强制分类
    index: true,            // 建立组合索引
    default: 3,             // 默认归类为晚餐
    validate: {
      validator: Number.isInteger,  // 整数验证
      message: '必须为整数'
    }
  }
}, { 
  // 时间戳配置
  timestamps: {
    createdAt: 'createdAt',  // 自动记录创建时间
    updatedAt: 'updatedAt'   // 自动记录更新时间
  },
  
  // 全局配置
  toJSON: { getters: true },  // 序列化时包含getter
  id: false                   // 禁用虚拟id字段
});

export default mongoose.model('Dish', dishSchema, 'dishes');  // 明确集合名称